<?php
/**
 * Модуль обработки редактора WYSIWYG
 * 
 * Класс предназначен для обработки кода, возвращаемого модулем WYSIWYG
 * 
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class Service_Editor {
  
  function __construct() {

  }
  
  /**
   * Оставляет только допустимые теги в коде WYSIWYG
   *
   * @param string $strHTML - исходный код WYSIWYG
   * @return string - преобразованная строка
   */
  public static function parseHTML($strHTML) {
    //$strHTML = str_replace('\"', '"', $strHTML);
    $jevix = new Service_HtmlParser();
    // 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.)
    $jevix->cfgAllowTags(array('a', 'img', 'i', 'b', 's', 'u', 'big', 'small', 'em', 'strike', 'span', 'p', 'strong', 'li', 'ol', 'ul', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'br'));
    
    // 2. Устанавливаем коротие теги. (не имеющие закрывающего тега)
    $jevix->cfgSetTagShort(array('br','img'));
    
    
    // 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом.
    $jevix->cfgSetTagCutWithContent(array('script', 'object', 'iframe'));
    
    // 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров.
    $jevix->cfgAllowTagParams('a', array('title', 'href'));
    //$jevix->cfgAllowTagParams('p', array('style'));
    //$jevix->cfgAllowTagParams('span', array('style'));
    $jevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int'));
    $jevix->cfgAllowTagStyles('img', array('float', 'height', 'width'));
    $jevix->cfgAllowTagStyles('div', array('text-align'));
    $jevix->cfgAllowTagStyles('span', array('font-weight', 'font-style', 'text-decoration'));
    //$jevix->cfgAllowTagStyles('p', array('text-align'));
    //$jevix->cfgAllowTagStyles('span', array('font-family', 'font-size'));
    
    // 6. Устанавливаем параметры тегов являющиеся обязяательными. Без них вырезает тег оставляя содержимое.
    $jevix->cfgSetTagParamsRequired('img', 'src');
    $jevix->cfgSetTagParamsRequired('a', 'href');
    
    // 7. Устанавливаем теги которые может содержать тег контейнер
    //    cfgSetTagChilds($tag, $childs, $isContainerOnly, $isChildOnly)
    $jevix->cfgSetTagChilds('ul', 'li', true, true);
    $jevix->cfgSetTagChilds('ol', 'li', true, true);
    
    // 8. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически
    $jevix->cfgSetTagParamsAutoAdd('a', array('rel' => 'nofollow'));
    //$jevix->cfgSetTagParamsAutoAdd('img', array('width' => '300', 'height' => '300'));
    
    // 9. Устанавливаем автозамену
    $jevix->cfgSetAutoReplace(array('+/-', '(c)', '(r)'), array('±', '©', '®'));
    
    // 11. Включаем или выключаем режим замены переноса строк на тег <br/>. (по умолчанию включен)
    $jevix->cfgSetAutoBrMode(false);
    
    // 12. Включаем или выключаем режим автоматического определения ссылок. (по умолчанию включен)
    $jevix->cfgSetAutoLinkMode(true);
    
    $res = $jevix->parse($strHTML, $errors);

    //$f = fopen(ABSPATH . 'begin.txt', 'w');
    //fwrite($f, $strHTML);
    //fclose($f);
    //$f = fopen(ABSPATH . 'end.txt', 'w');
    //fwrite($f, $res);
    //fclose($f);
    //echo '<pre>';
      //print_r($errors);
    //echo '</pre>';
    return $res;
  }
}
?>